package com.hyper_yang.javase.collections.list_collection.linkedList;

import java.util.LinkedList;

public class TryLinkedList {
// linkedList 底层是双链表，查询较慢，首尾操作还是比较快
//    1、创建集合对象时，啥也没干。
//    2、底层是创建 Node对象，有 item: 存储的值，有 prev: 上一个节点对象的地址，有 next: 下一个节点对象的地址
    /*
    特有方法:
        public void addFirst(E e)   在该列表开头插入指定的元素
        public void addLast(E e)  将指定的元素追加到此列表末尾
        public E getLFirst()  返回此列表中的第一个元素
        public E getLast()  返回此列表中的最后一个元素
        public E removeFirst()  从此列表中删除并返回第一个元素
        public E removeLast()  从此列表中删除并返回最后一个元素
    */
    public static void main(String[] args) {
        /*
            private static class Node<E> {
                E item;
                Node<E> next;
                Node<E> prev;

                Node(Node<E> prev, E element, Node<E> next) {
                    this.item = element;
                    this.next = next;
                    this.prev = prev;
                }
            }

            void linkLast(E e) {
                final Node<E> l = last;
                final Node<E> newNode = new Node<>(l, e, null);
                last = newNode;
                if (l == null)
                    first = newNode;
                else
                    l.next = newNode;
                size++;
                modCount++;
            }
        */
        LinkedList<String> list = new LinkedList<>();
        list.add("a");
        list.add("b");
        list.add("c");
        list.add("d");
        System.out.println(list);
        System.out.println(list.getFirst());
        System.out.println(list.getLast());
        list.addFirst("y");
        System.out.println(list);
        list.addLast("y");
        System.out.println(list);
        list.removeFirst();
        System.out.println(list);
        list.removeLast();
        System.out.println(list);
    }
}
